﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdbool.h>
#include <Windows.h>
#include <locale.h>
#include <time.h>
#define WALL L"□"
#define SBODY L"●"
#define SFOOD L"★"
#define KEY_PRESS(VK) ((GetAsyncKeyState(VK)&0x1) ? 1 : 0)

typedef struct SnakeNode//蛇的节点
{
	int x;//x坐标
	int y;//y坐标
	struct SnakeNode* next;//下个节点
}SnakeNode, * pSnakeNode;

enum DIRECT//方向
{
	UP=1,
	DOWN,
	RIGHT,
	LEFT
};
enum GAME_STATUS//游戏状态
{
	OK,//正常
	WALLS,//撞墙
	BITE,//吃到自己
	END,//游戏正常结束
};
typedef struct Snake
{
	pSnakeNode _pSnake;//维护蛇
	pSnakeNode _pFood;//维护食物
	enum DIRECT _Dir;//蛇的方向
	enum GAME_STATUS _GameStatus;//游戏状态
	int _Socre;//获得当前分数;
	int _foodWeight;//默认每个食物10分
	int _SleepTime;//每走路一步休眠时间
}Snake,* pSnake;

void pSnake_Inits(pSnake ps);
void SetsPos(short x, short y);
//游戏初始化
void GameStart(pSnake ps);
//打印标签
void WelcomeToGame();
//创建地图
void CreateMap();
//初始化蛇
void InitSnake(pSnake ps);
//创建食物
void CreateFood(pSnake ps);


//游戏运行
void GameRun(pSnake ps);
//答应提示信息
void PrintfHelP(pSnake ps);
//暂停
void pause();
//查找下一个位置
int IFNEXT(pSnake ps, pSnakeNode cur);
//改变蛇的位置
void IFSNAKE(pSnake ps, pSnakeNode cur);
//吃掉食物
void IFFOOD(pSnake ps, pSnakeNode cur);
//蛇移动
void SnakeMove(pSnake ps);

//游戏结束
void GameEnd(pSnake ps);

